@Test public void testDefaultCanAllocateIndependentKeysInParallel() { final ScopedDirectoryLayer directoryLayer = ScopedDirectoryLayer.global(database); Map<String, Long> mappingsFromOld = new ConcurrentHashMap<>(); Map<String, Long> mappingsFromNew = new ConcurrentHashMap<>(); List<CompletableFuture<?>> operations = new ArrayList<>(); for (int i = 0; i < 100; i++) { String oldDirLayerKey = i + "-old-dl-key"; String newDirLayerKey = i + "-new-dl-key"; operations.add(directoryLayer.resolve(oldDirLayerKey).thenApply(value -> mappingsFromOld.put(oldDirLayerKey, value))); operations.add(globalScope.resolve(newDirLayerKey).thenApply(value -> mappingsFromNew.put(newDirLayerKey, value))); } CompletableFuture.allOf(operations.toArray(new CompletableFuture<?>[0])).join(); BiMap<String, Long> completeMapping = ImmutableBiMap.<String, Long>builder() .putAll(mappingsFromOld) .putAll(mappingsFromNew) .build(); for (Map.Entry<String, Long> entry : completeMapping.entrySet()) { try (FDBRecordContext context = database.openContext()) { assertThat("the FDB directory layer sees the mapping", directoryLayer.mustResolve(context, entry.getKey()).join(), is(entry.getValue())); assertThat("the ScopedDirectoryLayer sees the mapping", globalScope.mustResolve(context, entry.getKey()).join(), is(entry.getValue())); } } }
public static ExtendedDirectoryLayer global(@Nonnull FDBDatabase database) { return new ExtendedDirectoryLayer(database, null, null); }
ExtendedDirectoryLayer extends LocatableResolver { public static ExtendedDirectoryLayer global(@Nonnull FDBDatabase database) { return new ExtendedDirectoryLayer(database, null, null); } }
ExtendedDirectoryLayer extends LocatableResolver { public static ExtendedDirectoryLayer global(@Nonnull FDBDatabase database) { return new ExtendedDirectoryLayer(database, null, null); } @Deprecated @API(API.Status.DEPRECATED)  ExtendedDirectoryLayer(@Nonnull FDBRecordContext context, @Nonnull KeySpacePath path);  ExtendedDirectoryLayer(@Nonnull FDBDatabase database, @Nonnull ResolvedKeySpacePath path); private  ExtendedDirectoryLayer(@Nonnull FDBDatabase database,
                                   @Nullable KeySpacePath path,
                                   @Nullable CompletableFuture<ResolvedKeySpacePath> resolvedPathFuture); }
ExtendedDirectoryLayer extends LocatableResolver { public static ExtendedDirectoryLayer global(@Nonnull FDBDatabase database) { return new ExtendedDirectoryLayer(database, null, null); } @Deprecated @API(API.Status.DEPRECATED)  ExtendedDirectoryLayer(@Nonnull FDBRecordContext context, @Nonnull KeySpacePath path);  ExtendedDirectoryLayer(@Nonnull FDBDatabase database, @Nonnull ResolvedKeySpacePath path); private  ExtendedDirectoryLayer(@Nonnull FDBDatabase database,
                                   @Nullable KeySpacePath path,
                                   @Nullable CompletableFuture<ResolvedKeySpacePath> resolvedPathFuture); static ExtendedDirectoryLayer global(@Nonnull FDBDatabase database); @Override CompletableFuture<Void> setMapping(FDBRecordContext context, String key, ResolverResult value); @Override CompletableFuture<Void> updateMetadata(FDBRecordContext context, String key, byte[] metadata); @Override CompletableFuture<Void> setWindow(long count); @Override @Nonnull CompletableFuture<Subspace> getMappingSubspaceAsync(); @Override @Nonnull ResolverResult deserializeValue(byte[] value); @Override @Nonnull CompletableFuture<Subspace> getBaseSubspaceAsync(); }
ExtendedDirectoryLayer extends LocatableResolver { public static ExtendedDirectoryLayer global(@Nonnull FDBDatabase database) { return new ExtendedDirectoryLayer(database, null, null); } @Deprecated @API(API.Status.DEPRECATED)  ExtendedDirectoryLayer(@Nonnull FDBRecordContext context, @Nonnull KeySpacePath path);  ExtendedDirectoryLayer(@Nonnull FDBDatabase database, @Nonnull ResolvedKeySpacePath path); private  ExtendedDirectoryLayer(@Nonnull FDBDatabase database,
                                   @Nullable KeySpacePath path,
                                   @Nullable CompletableFuture<ResolvedKeySpacePath> resolvedPathFuture); static ExtendedDirectoryLayer global(@Nonnull FDBDatabase database); @Override CompletableFuture<Void> setMapping(FDBRecordContext context, String key, ResolverResult value); @Override CompletableFuture<Void> updateMetadata(FDBRecordContext context, String key, byte[] metadata); @Override CompletableFuture<Void> setWindow(long count); @Override @Nonnull CompletableFuture<Subspace> getMappingSubspaceAsync(); @Override @Nonnull ResolverResult deserializeValue(byte[] value); @Override @Nonnull CompletableFuture<Subspace> getBaseSubspaceAsync();  }