tidy up branding and implement QueuedClient,getBrand() correctly
This commit is contained in:
parent
c04bdb8088
commit
2b5bf0eb21
3 changed files with 20 additions and 20 deletions
|
@ -1958,15 +1958,12 @@ final class RpcState<VatId> {
|
|||
resolutionType = ResolutionType.REMOTE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (replacementBrand == NULL_CAPABILITY_BRAND
|
||||
|| replacementBrand == BROKEN_CAPABILITY_BRAND) {
|
||||
else if (replacement.isNull() || replacement.isError()) {
|
||||
resolutionType = ResolutionType.BROKEN;
|
||||
}
|
||||
else {
|
||||
resolutionType = ResolutionType.REFLECTED;
|
||||
}
|
||||
}
|
||||
|
||||
assert isResolved();
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@ import java.util.concurrent.CompletionStage;
|
|||
|
||||
public final class Capability {
|
||||
|
||||
static final Object NULL_CAPABILITY_BRAND = new Object();
|
||||
static final Object BROKEN_CAPABILITY_BRAND = new Object();
|
||||
|
||||
static class BuilderContext {
|
||||
CapTableBuilder capTable;
|
||||
}
|
||||
|
@ -645,15 +648,15 @@ public final class Capability {
|
|||
}
|
||||
|
||||
public static ClientHook newBrokenCap(String reason) {
|
||||
return newBrokenClient(reason, false, ClientHook.BROKEN_CAPABILITY_BRAND);
|
||||
return newBrokenClient(reason, false, BROKEN_CAPABILITY_BRAND);
|
||||
}
|
||||
|
||||
public static ClientHook newBrokenCap(Throwable exc) {
|
||||
return newBrokenClient(exc, false, ClientHook.BROKEN_CAPABILITY_BRAND);
|
||||
return newBrokenClient(exc, false, BROKEN_CAPABILITY_BRAND);
|
||||
}
|
||||
|
||||
public static ClientHook newNullCap() {
|
||||
return newBrokenClient(RpcException.failed("Called null capability"), true, ClientHook.NULL_CAPABILITY_BRAND);
|
||||
return newBrokenClient(RpcException.failed("Called null capability"), true, NULL_CAPABILITY_BRAND);
|
||||
}
|
||||
|
||||
private static ClientHook newBrokenClient(String reason, boolean resolved, Object brand) {
|
||||
|
@ -800,6 +803,11 @@ public final class Capability {
|
|||
public CompletableFuture<ClientHook> whenMoreResolved() {
|
||||
return this.promiseForClientResolution.copy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getBrand() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static final class CapabilityServerSet<T extends Capability.Server> {
|
||||
|
|
|
@ -5,9 +5,6 @@ import java.util.concurrent.CompletableFuture;
|
|||
|
||||
public interface ClientHook {
|
||||
|
||||
Object NULL_CAPABILITY_BRAND = new Object();
|
||||
Object BROKEN_CAPABILITY_BRAND = new Object();
|
||||
|
||||
/**
|
||||
* Start a new call, allowing the client to allocate request/response objects as it sees fit.
|
||||
* This version is used when calls are made from application code in the local process.
|
||||
|
@ -56,9 +53,7 @@ public interface ClientHook {
|
|||
discover when a capability it needs to marshal is one that it created in the first place, and
|
||||
therefore it can transfer the capability without proxying.
|
||||
*/
|
||||
default Object getBrand() {
|
||||
return NULL_CAPABILITY_BRAND;
|
||||
}
|
||||
Object getBrand();
|
||||
|
||||
/**
|
||||
* Repeatedly calls whenMoreResolved() until it returns nullptr.
|
||||
|
@ -75,14 +70,14 @@ public interface ClientHook {
|
|||
* reading a null pointer out of a Cap'n Proto message.
|
||||
*/
|
||||
default boolean isNull() {
|
||||
return getBrand() == NULL_CAPABILITY_BRAND;
|
||||
return getBrand() == Capability.NULL_CAPABILITY_BRAND;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the capability was created by newBrokenCap().
|
||||
*/
|
||||
default boolean isError() {
|
||||
return getBrand() == BROKEN_CAPABILITY_BRAND;
|
||||
return getBrand() == Capability.BROKEN_CAPABILITY_BRAND;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue