From a72aa5d8d356e3a67f7250108c0d9d4db780fa4f Mon Sep 17 00:00:00 2001 From: Alec Grieser Date: Tue, 27 Feb 2018 14:05:09 -0800 Subject: [PATCH 1/2] move ruby encoding specification to top ; move node shebang to top ; add in some node code that disappeared mysteriously --- bindings/nodejs/lib/directory.js | 12 +++ bindings/nodejs/lib/fdbUtil.js | 84 +++++++++++++++++++++ bindings/nodejs/lib/subspace.js | 65 ++++++++++++++++ bindings/nodejs/tests/promise_aplus_test.js | 4 +- bindings/nodejs/tests/tester.js | 4 +- bindings/ruby/lib/fdbdirectory.rb | 4 +- bindings/ruby/lib/fdbimpl.rb | 4 +- bindings/ruby/lib/fdblocality.rb | 4 +- bindings/ruby/lib/fdbsubspace.rb | 4 +- bindings/ruby/lib/fdbtuple.rb | 4 +- bindings/ruby/tests/directory_extension.rb | 3 +- bindings/ruby/tests/tester.rb | 4 +- 12 files changed, 179 insertions(+), 17 deletions(-) diff --git a/bindings/nodejs/lib/directory.js b/bindings/nodejs/lib/directory.js index 0ff16839ac2..ddd4f9e58e0 100644 --- a/bindings/nodejs/lib/directory.js +++ b/bindings/nodejs/lib/directory.js @@ -18,6 +18,18 @@ * limitations under the License. */ + +"use strict"; + +var util = require('util'); + +var buffer = require('./bufferConversion'); +var future = require('./future'); +var transactional = require('./retryDecorator'); +var tuple = require('./tuple'); +var Subspace = require('./subspace'); +var fdbUtil = require('./fdbUtil'); + /************* * Utilities * *************/ diff --git a/bindings/nodejs/lib/fdbUtil.js b/bindings/nodejs/lib/fdbUtil.js index c3411cd3f1f..4fd56c63c8c 100644 --- a/bindings/nodejs/lib/fdbUtil.js +++ b/bindings/nodejs/lib/fdbUtil.js @@ -18,3 +18,87 @@ * limitations under the License. */ + +"use strict"; + +var buffer = require('./bufferConversion'); +var future = require('./future'); + +var strinc = function(str) { + var buf = buffer(str); + + var lastNonFFByte; + for(lastNonFFByte = buf.length-1; lastNonFFByte >= 0; --lastNonFFByte) + if(buf[lastNonFFByte] != 0xFF) + break; + + if(lastNonFFByte < 0) + throw new Error('invalid argument \'' + str + '\': prefix must have at least one byte not equal to 0xFF'); + + var copy = new Buffer(lastNonFFByte + 1); + str.copy(copy, 0, 0, copy.length); + ++copy[lastNonFFByte]; + + return copy; +}; + +var whileLoop = function(func, cb) { + return future.create(function(futureCb) { + var calledCallback = true; + function outer(err, res) { + if(err || typeof(res) !== 'undefined') { + futureCb(err, res); + } + else if(!calledCallback) { + calledCallback = true; + } + else { + while(calledCallback) { + calledCallback = false; + func(outer); + } + + calledCallback = true; + } + } + + outer(); + }, cb); +}; + +var keyToBuffer = function(key) { + if(typeof(key.asFoundationDBKey) == 'function') + return buffer(key.asFoundationDBKey()); + + return buffer(key); +}; + +var valueToBuffer = function(val) { + if(typeof(val.asFoundationDBValue) == 'function') + return buffer(val.asFoundationDBValue()); + + return buffer(val); +}; + +var buffersEqual = function(buf1, buf2) { + if(!buf1 || !buf2) + return buf1 === buf2; + + if(buf1.length !== buf2.length) + return false; + + for(var i = 0; i < buf1.length; ++i) + if(buf1[i] !== buf2[i]) + return false; + + return true; +}; + +module.exports = { + strinc: strinc, + whileLoop: whileLoop, + keyToBuffer: keyToBuffer, + valueToBuffer: valueToBuffer, + buffersEqual: buffersEqual +}; + diff --git a/bindings/nodejs/lib/subspace.js b/bindings/nodejs/lib/subspace.js index b92b6baaa28..9015db633a0 100644 --- a/bindings/nodejs/lib/subspace.js +++ b/bindings/nodejs/lib/subspace.js @@ -18,3 +18,68 @@ * limitations under the License. */ + +"use strict"; + +var buffer = require('./bufferConversion'); +var fdbUtil = require('./fdbUtil'); +var tuple = require('./tuple'); + +var Subspace = function(prefixArray, rawPrefix) { + if(typeof rawPrefix === 'undefined') + rawPrefix = new Buffer(0); + if(typeof prefixArray === 'undefined') + prefixArray = []; + + rawPrefix = fdbUtil.keyToBuffer(rawPrefix); + var packed = tuple.pack(prefixArray); + + this.rawPrefix = Buffer.concat([rawPrefix, packed], rawPrefix.length + packed.length); +}; + +Subspace.prototype.key = function() { + return this.rawPrefix; +}; + +Subspace.prototype.pack = function(arr) { + var packed = tuple.pack(arr); + return Buffer.concat([this.rawPrefix, packed], this.rawPrefix.length + packed.length) ; +}; + +Subspace.prototype.unpack = function(key) { + key = fdbUtil.keyToBuffer(key); + if(!this.contains(key)) + throw new Error('Cannot unpack key that is not in subspace.'); + + return tuple.unpack(key.slice(this.rawPrefix.length)); +}; + +Subspace.prototype.range = function(arr) { + if(typeof arr === 'undefined') + arr = []; + + var range = tuple.range(arr); + return { + begin: Buffer.concat([this.rawPrefix, range.begin], this.rawPrefix.length + range.begin.length), + end: Buffer.concat([this.rawPrefix, range.end], this.rawPrefix.length + range.end.length) + }; +}; + +Subspace.prototype.contains = function(key) { + key = fdbUtil.keyToBuffer(key); + return key.length >= this.rawPrefix.length && fdbUtil.buffersEqual(key.slice(0, this.rawPrefix.length), this.rawPrefix); +}; + +Subspace.prototype.get = function(item) { + return this.subspace([item]); +}; + +Subspace.prototype.subspace = function(arr) { + return new Subspace(arr, this.rawPrefix); +}; + +Subspace.prototype.asFoundationDBKey = function() { + return this.key(); +}; + +module.exports = Subspace; diff --git a/bindings/nodejs/tests/promise_aplus_test.js b/bindings/nodejs/tests/promise_aplus_test.js index 7bc59251fa1..0dea95aa343 100644 --- a/bindings/nodejs/tests/promise_aplus_test.js +++ b/bindings/nodejs/tests/promise_aplus_test.js @@ -1,3 +1,5 @@ +#!/usr/bin/env node + /* * promise_aplus_test.js * @@ -18,8 +20,6 @@ * limitations under the License. */ -#!/usr/bin/env node - "use strict"; var promisesAplusTests = require('promises-aplus-tests'); diff --git a/bindings/nodejs/tests/tester.js b/bindings/nodejs/tests/tester.js index 850989ff0f8..d8a6f9dd23d 100755 --- a/bindings/nodejs/tests/tester.js +++ b/bindings/nodejs/tests/tester.js @@ -1,3 +1,5 @@ +#!/usr/bin/env node + /* * tester.js * @@ -18,8 +20,6 @@ * limitations under the License. */ -#!/usr/bin/env node - "use strict"; //cmd line: node tester.js diff --git a/bindings/ruby/lib/fdbdirectory.rb b/bindings/ruby/lib/fdbdirectory.rb index cb4657adfa6..052c7432a67 100644 --- a/bindings/ruby/lib/fdbdirectory.rb +++ b/bindings/ruby/lib/fdbdirectory.rb @@ -1,3 +1,5 @@ +#encoding: BINARY + # # fdbdirectory.rb # @@ -18,8 +20,6 @@ # limitations under the License. # -#encoding: BINARY - # FoundationDB Ruby API # Documentation for this API can be found at diff --git a/bindings/ruby/lib/fdbimpl.rb b/bindings/ruby/lib/fdbimpl.rb index 27660e13c1c..ce28e15ca70 100644 --- a/bindings/ruby/lib/fdbimpl.rb +++ b/bindings/ruby/lib/fdbimpl.rb @@ -1,3 +1,5 @@ +#encoding: BINARY + # # fdbimpl.rb # @@ -18,8 +20,6 @@ # limitations under the License. # -#encoding: BINARY - # FoundationDB Ruby API # Documentation for this API can be found at diff --git a/bindings/ruby/lib/fdblocality.rb b/bindings/ruby/lib/fdblocality.rb index a86459a6eb0..3740e3f2c51 100644 --- a/bindings/ruby/lib/fdblocality.rb +++ b/bindings/ruby/lib/fdblocality.rb @@ -1,3 +1,5 @@ +#encoding: BINARY + # # fdblocality.rb # @@ -18,8 +20,6 @@ # limitations under the License. # -#encoding: BINARY - # FoundationDB Ruby API # Documentation for this API can be found at diff --git a/bindings/ruby/lib/fdbsubspace.rb b/bindings/ruby/lib/fdbsubspace.rb index 53efdcc9344..3369e238ccc 100644 --- a/bindings/ruby/lib/fdbsubspace.rb +++ b/bindings/ruby/lib/fdbsubspace.rb @@ -1,3 +1,5 @@ +#encoding: BINARY + # # fdbsubspace.rb # @@ -18,8 +20,6 @@ # limitations under the License. # -#encoding: BINARY - # FoundationDB Ruby API # Documentation for this API can be found at diff --git a/bindings/ruby/lib/fdbtuple.rb b/bindings/ruby/lib/fdbtuple.rb index c392a9cf0f5..9278cc4a899 100644 --- a/bindings/ruby/lib/fdbtuple.rb +++ b/bindings/ruby/lib/fdbtuple.rb @@ -1,3 +1,5 @@ +#encoding: BINARY + # # fdbtuple.rb # @@ -18,8 +20,6 @@ # limitations under the License. # -#encoding: BINARY - # FoundationDB Ruby API # Documentation for this API can be found at diff --git a/bindings/ruby/tests/directory_extension.rb b/bindings/ruby/tests/directory_extension.rb index d7078b159a1..2aa0696f852 100644 --- a/bindings/ruby/tests/directory_extension.rb +++ b/bindings/ruby/tests/directory_extension.rb @@ -1,3 +1,5 @@ +#encoding:BINARY + # # directory_extension.rb # @@ -18,7 +20,6 @@ # limitations under the License. # -#encoding:BINARY require 'fdb' module DirectoryExtension diff --git a/bindings/ruby/tests/tester.rb b/bindings/ruby/tests/tester.rb index 33b7c073d77..c5fc0845cd7 100755 --- a/bindings/ruby/tests/tester.rb +++ b/bindings/ruby/tests/tester.rb @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +#encoding:BINARY + # # tester.rb # @@ -19,8 +21,6 @@ # limitations under the License. # -#encoding:BINARY - require 'thread' $:.unshift( File.join( File.dirname(__FILE__), "../lib" ) ) From 8fb99cae93e1ffe4a53326fdcb0443f230b766ca Mon Sep 17 00:00:00 2001 From: Alec Grieser Date: Tue, 27 Feb 2018 18:27:50 -0800 Subject: [PATCH 2/2] fix paths within java local.mk --- bindings/java/local.mk | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/bindings/java/local.mk b/bindings/java/local.mk index 30cac012906..41a40029171 100644 --- a/bindings/java/local.mk +++ b/bindings/java/local.mk @@ -40,22 +40,22 @@ endif define add_java_binding_targets - JAVA$(1)_GENERATED_SOURCES := bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/NetworkOptions.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/ClusterOptions.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/DatabaseOptions.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/TransactionOptions.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/StreamingMode.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/ConflictRangeType.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/MutationType.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/FDBException.java + JAVA$(1)_GENERATED_SOURCES := bindings/java/src$(1)/main/com/apple/cie/foundationdb/NetworkOptions.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/ClusterOptions.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/DatabaseOptions.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/TransactionOptions.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/StreamingMode.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/ConflictRangeType.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/MutationType.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/FDBException.java - JAVA$(1)_SOURCES := $$(JAVA$(1)_GENERATED_SOURCES) bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/async/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/tuple/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/directory/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/subspace/*.java bindings/java/src$(1)/test/com/apple/apple/foundationdbdb/test/*.java + JAVA$(1)_SOURCES := $$(JAVA$(1)_GENERATED_SOURCES) bindings/java/src$(1)/main/com/apple/cie/foundationdb/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/async/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/tuple/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/directory/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/subspace/*.java bindings/java/src$(1)/test/com/apple/cie/foundationdb/test/*.java fdb_java$(1): bindings/java/foundationdb-client$(1).jar bindings/java/foundationdb-tests$(1).jar bindings/java/foundationdb-tests$(1).jar: bindings/java/.classstamp$(1) @echo "Building $$@" - @jar cf $$@ -C bindings/java/classes$(1)/test com/apple/apple/foundationdbdb + @jar cf $$@ -C bindings/java/classes$(1)/test com/apple/cie/foundationdb bindings/java/foundationdb-client$(1).jar: bindings/java/.classstamp$(1) lib/libfdb_java.$(DLEXT) @echo "Building $$@" @rm -rf bindings/java/classes$(1)/main/lib/$$(PLATFORM)/$$(java_ARCH) @mkdir -p bindings/java/classes$(1)/main/lib/$$(PLATFORM)/$$(java_ARCH) @cp lib/libfdb_java.$$(DLEXT) bindings/java/classes$(1)/main/lib/$$(PLATFORM)/$$(java_ARCH)/libfdb_java.$$(java_DLEXT) - @jar cf $$@ -C bindings/java/classes$(1)/main com/apple/apple/foundationdbdb -C bindings/java/classes$(1)/main lib + @jar cf $$@ -C bindings/java/classes$(1)/main com/apple/cie/foundationdb -C bindings/java/classes$(1)/main lib fdb_java$(1)_jar_clean: @rm -rf $$(JAVA$(1)_GENERATED_SOURCES) @@ -65,20 +65,20 @@ define add_java_binding_targets # Redefinition of a target already defined in generated.mk, but it's "okay" and the way things were done before. fdb_java_clean: fdb_java$(1)_jar_clean - bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/StreamingMode.java: bin/vexillographer.exe fdbclient/vexillographer/fdb.options + bindings/java/src$(1)/main/com/apple/cie/foundationdb/StreamingMode.java: bin/vexillographer.exe fdbclient/vexillographer/fdb.options @echo "Building Java options" @$$(MONO) bin/vexillographer.exe fdbclient/vexillographer/fdb.options java $$(@D) - bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/MutationType.java: bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/StreamingMode.java + bindings/java/src$(1)/main/com/apple/cie/foundationdb/MutationType.java: bindings/java/src$(1)/main/com/apple/cie/foundationdb/StreamingMode.java @true - bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/ConflictRangeType.java: bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/StreamingMode.java + bindings/java/src$(1)/main/com/apple/cie/foundationdb/ConflictRangeType.java: bindings/java/src$(1)/main/com/apple/cie/foundationdb/StreamingMode.java @true - bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/FDBException.java: bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/StreamingMode.java + bindings/java/src$(1)/main/com/apple/cie/foundationdb/FDBException.java: bindings/java/src$(1)/main/com/apple/cie/foundationdb/StreamingMode.java @true - bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/%Options.java: bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/StreamingMode.java + bindings/java/src$(1)/main/com/apple/cie/foundationdb/%Options.java: bindings/java/src$(1)/main/com/apple/cie/foundationdb/StreamingMode.java @true bindings/java/src$(1)/main/overview.html: bindings/java/src$(1)/main/overview.html.in $$(ALL_MAKEFILES) versions.target @@ -89,8 +89,8 @@ define add_java_binding_targets @rm -rf bindings/java/classes$(1) @mkdir -p bindings/java/classes$(1)/main @mkdir -p bindings/java/classes$(1)/test - @$$(JAVAC) $$(JAVA$(1)FLAGS) -d bindings/java/classes$(1)/main bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/async/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/tuple/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/directory/*.java bindings/java/src$(1)/main/com/apple/apple/foundationdbdb/subspace/*.java - @$$(JAVAC) $$(JAVA$(1)FLAGS) -cp bindings/java/classes$(1)/main -d bindings/java/classes$(1)/test bindings/java/src$(1)/test/com/apple/apple/foundationdbdb/test/*.java + @$$(JAVAC) $$(JAVA$(1)FLAGS) -d bindings/java/classes$(1)/main bindings/java/src$(1)/main/com/apple/cie/foundationdb/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/async/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/tuple/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/directory/*.java bindings/java/src$(1)/main/com/apple/cie/foundationdb/subspace/*.java + @$$(JAVAC) $$(JAVA$(1)FLAGS) -cp bindings/java/classes$(1)/main -d bindings/java/classes$(1)/test bindings/java/src$(1)/test/com/apple/cie/foundationdb/test/*.java @echo timestamp > bindings/java/.classstamp$(1) javadoc$(1): $$(JAVA$(1)_SOURCES) bindings/java/src$(1)/main/overview.html @@ -101,7 +101,7 @@ define add_java_binding_targets -windowtitle "FoundationDB Java Client API" \ -doctitle "FoundationDB Java Client API" \ -link "http://docs.oracle.com/javase/8/docs/api" \ - com.apple.cie.foundationdb.org.apple.cie.foundationdb.async com.apple.cie.foundationdb.tuple com.apple.cie.foundationdb.directory com.apple.cie.foundationdb.subspace + com.apple.cie.foundationdb com.apple.cie.foundationdb.async com.apple.cie.foundationdb.tuple com.apple.cie.foundationdb.directory com.apple.cie.foundationdb.subspace javadoc$(1)_clean: @rm -rf $$(JAVADOC_DIR)/javadoc$(1) @@ -152,7 +152,7 @@ define add_java_binding_targets packages/fdb-java$(1)-$$(JARVER)-sources.jar: $$(JAVA$(1)_GENERATED_SOURCES) versions.target @echo "Building $$@" @rm -f $$@ - @jar cf $(TOPDIR)/$$@ -C bindings/java/src$(1)/main com/apple/apple/foundationdbdb + @jar cf $(TOPDIR)/$$@ -C bindings/java/src$(1)/main com/apple/cie/foundationdb packages/fdb-java$(1)-$$(JARVER)-javadoc.jar: javadoc$(1) versions.target @echo "Building $$@"