@Test public void testResolveWithMetadata() { byte[] metadata = Tuple.from("some-metadata").pack(); MetadataHook hook = ignore -> metadata; final ResolverResult result; final ResolverCreateHooks hooks = new ResolverCreateHooks(DEFAULT_CHECK, hook); result = globalScope.resolveWithMetadata("a-key", hooks).join(); assertArrayEquals(metadata, result.getMetadata()); ResolverResult expected = new ResolverResult(result.getValue(), metadata); try (FDBRecordContext context = database.openContext()) { ResolverResult resultFromDB = globalScope.mustResolveWithMetadata(context, "a-key").join(); assertEquals(expected.getValue(), resultFromDB.getValue()); assertArrayEquals(expected.getMetadata(), resultFromDB.getMetadata()); } assertEquals(expected, globalScope.resolveWithMetadata("a-key", hooks).join()); byte[] newMetadata = Tuple.from("some-different-metadata").pack(); MetadataHook newHook = ignore -> newMetadata; final ResolverCreateHooks newHooks = new ResolverCreateHooks(DEFAULT_CHECK, newHook); database.clearCaches(); assertArrayEquals(metadata, globalScope.resolveWithMetadata("a-key", newHooks).join().getMetadata(), "hook is only run on create, does not update metadata"); }
@Nonnull public CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull String name, @Nonnull ResolverCreateHooks hooks) { return resolveWithMetadata((FDBStoreTimer)null, name, hooks); }
LocatableResolver { @Nonnull public CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull String name, @Nonnull ResolverCreateHooks hooks) { return resolveWithMetadata((FDBStoreTimer)null, name, hooks); } }
LocatableResolver { @Nonnull public CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull String name, @Nonnull ResolverCreateHooks hooks) { return resolveWithMetadata((FDBStoreTimer)null, name, hooks); } protected  LocatableResolver(@Nonnull FDBDatabase database,
                                @Nullable KeySpacePath path,
                                @Nullable CompletableFuture<ResolvedKeySpacePath> resolvedPath); }
LocatableResolver { @Nonnull public CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull String name, @Nonnull ResolverCreateHooks hooks) { return resolveWithMetadata((FDBStoreTimer)null, name, hooks); } protected  LocatableResolver(@Nonnull FDBDatabase database,
                                @Nullable KeySpacePath path,
                                @Nullable CompletableFuture<ResolvedKeySpacePath> resolvedPath); ScopedValue<T> wrap(T value); @Nonnull FDBDatabase getDatabase(); @Nonnull CompletableFuture<Long> resolve(@Nonnull String name); @Nonnull CompletableFuture<Long> resolve(@Nullable FDBStoreTimer timer, @Nonnull String name); @API(API.Status.UNSTABLE) @Nonnull CompletableFuture<Long> resolve(@Nonnull FDBRecordContext context, @Nonnull String name); @Nonnull CompletableFuture<Long> resolve(@Nonnull String name,
                                           @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<Long> resolve(@Nullable FDBStoreTimer timer,
                                           @Nonnull String name,
                                           @Nonnull ResolverCreateHooks hooks); @API(API.Status.UNSTABLE) @Nonnull CompletableFuture<Long> resolve(@Nonnull FDBRecordContext context,
                                           @Nonnull String name,
                                           @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull String name,
                                                                 @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<ResolverResult> resolveWithMetadata(@Nullable FDBStoreTimer timer,
                                                                 @Nonnull String name,
                                                                 @Nonnull ResolverCreateHooks hooks); @API(API.Status.UNSTABLE) @Nonnull CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull FDBRecordContext context, @Nonnull String name, @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<ResolverResult> mustResolveWithMetadata(@Nonnull FDBRecordContext context, @Nonnull String name); CompletableFuture<Long> mustResolve(@Nonnull FDBRecordContext context, @Nonnull String name); @Nonnull CompletableFuture<String> reverseLookup(@Nullable FDBStoreTimer timer, @Nonnull Long value); @Nonnull CompletableFuture<Void> exclusiveLock(); @Nonnull CompletableFuture<Void> enableWriteLock(); @Nonnull CompletableFuture<Void> disableWriteLock(); @Nonnull CompletableFuture<Void> retireLayer(); @Nonnull CompletableFuture<Void> incrementVersion(); @Nonnull CompletableFuture<Integer> getVersion(@Nullable FDBStoreTimer timer); @Nonnull CompletableFuture<Boolean> retired(@Nullable FDBStoreTimer timer); @Nonnull CompletableFuture<Boolean> retiredSkipCache(@Nonnull FDBRecordContext context); @Nonnull CompletableFuture<Void> updateMetadataAndVersion(@Nonnull final String key,
                                                            @Nullable final byte[] metadata); @VisibleForTesting final CompletableFuture<Void> setMapping(FDBRecordContext context, String key, Long value); @VisibleForTesting abstract CompletableFuture<Void> setWindow(long count); @Nonnull @API(API.Status.DEPRECATED) @Deprecated Subspace getMappingSubspace(); @Nonnull abstract CompletableFuture<Subspace> getMappingSubspaceAsync(); @Nonnull @API(API.Status.DEPRECATED) @Deprecated Subspace getBaseSubspace(); @Nonnull abstract CompletableFuture<Subspace> getBaseSubspaceAsync(); @Nonnull abstract ResolverResult deserializeValue(byte[] value); @Override String toString(); @Override boolean equals(Object obj); @Override int hashCode(); }
LocatableResolver { @Nonnull public CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull String name, @Nonnull ResolverCreateHooks hooks) { return resolveWithMetadata((FDBStoreTimer)null, name, hooks); } protected  LocatableResolver(@Nonnull FDBDatabase database,
                                @Nullable KeySpacePath path,
                                @Nullable CompletableFuture<ResolvedKeySpacePath> resolvedPath); ScopedValue<T> wrap(T value); @Nonnull FDBDatabase getDatabase(); @Nonnull CompletableFuture<Long> resolve(@Nonnull String name); @Nonnull CompletableFuture<Long> resolve(@Nullable FDBStoreTimer timer, @Nonnull String name); @API(API.Status.UNSTABLE) @Nonnull CompletableFuture<Long> resolve(@Nonnull FDBRecordContext context, @Nonnull String name); @Nonnull CompletableFuture<Long> resolve(@Nonnull String name,
                                           @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<Long> resolve(@Nullable FDBStoreTimer timer,
                                           @Nonnull String name,
                                           @Nonnull ResolverCreateHooks hooks); @API(API.Status.UNSTABLE) @Nonnull CompletableFuture<Long> resolve(@Nonnull FDBRecordContext context,
                                           @Nonnull String name,
                                           @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull String name,
                                                                 @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<ResolverResult> resolveWithMetadata(@Nullable FDBStoreTimer timer,
                                                                 @Nonnull String name,
                                                                 @Nonnull ResolverCreateHooks hooks); @API(API.Status.UNSTABLE) @Nonnull CompletableFuture<ResolverResult> resolveWithMetadata(@Nonnull FDBRecordContext context, @Nonnull String name, @Nonnull ResolverCreateHooks hooks); @Nonnull CompletableFuture<ResolverResult> mustResolveWithMetadata(@Nonnull FDBRecordContext context, @Nonnull String name); CompletableFuture<Long> mustResolve(@Nonnull FDBRecordContext context, @Nonnull String name); @Nonnull CompletableFuture<String> reverseLookup(@Nullable FDBStoreTimer timer, @Nonnull Long value); @Nonnull CompletableFuture<Void> exclusiveLock(); @Nonnull CompletableFuture<Void> enableWriteLock(); @Nonnull CompletableFuture<Void> disableWriteLock(); @Nonnull CompletableFuture<Void> retireLayer(); @Nonnull CompletableFuture<Void> incrementVersion(); @Nonnull CompletableFuture<Integer> getVersion(@Nullable FDBStoreTimer timer); @Nonnull CompletableFuture<Boolean> retired(@Nullable FDBStoreTimer timer); @Nonnull CompletableFuture<Boolean> retiredSkipCache(@Nonnull FDBRecordContext context); @Nonnull CompletableFuture<Void> updateMetadataAndVersion(@Nonnull final String key,
                                                            @Nullable final byte[] metadata); @VisibleForTesting final CompletableFuture<Void> setMapping(FDBRecordContext context, String key, Long value); @VisibleForTesting abstract CompletableFuture<Void> setWindow(long count); @Nonnull @API(API.Status.DEPRECATED) @Deprecated Subspace getMappingSubspace(); @Nonnull abstract CompletableFuture<Subspace> getMappingSubspaceAsync(); @Nonnull @API(API.Status.DEPRECATED) @Deprecated Subspace getBaseSubspace(); @Nonnull abstract CompletableFuture<Subspace> getBaseSubspaceAsync(); @Nonnull abstract ResolverResult deserializeValue(byte[] value); @Override String toString(); @Override boolean equals(Object obj); @Override int hashCode();  }