fix: use default endpint while route is empty (#43)

diff --git a/ceresdb-example/src/test/java/io/ceresdb/CeresDBTest.java b/ceresdb-example/src/test/java/io/ceresdb/CeresDBTest.java
index 39e9e48..f4a4c4d 100644
--- a/ceresdb-example/src/test/java/io/ceresdb/CeresDBTest.java
+++ b/ceresdb-example/src/test/java/io/ceresdb/CeresDBTest.java
@@ -3,12 +3,10 @@
  */
 package io.ceresdb;
 
-import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/Route.java b/ceresdb-protocol/src/main/java/io/ceresdb/Route.java
index 5834bc8..2793367 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/Route.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/Route.java
@@ -9,7 +9,7 @@
 import io.ceresdb.common.util.Clock;
 
 /**
- * Route info for metric.
+ * Route info for table.
  *
  */
 public class Route {
@@ -18,21 +18,21 @@
     private Object           ext;
     private final AtomicLong lastHit = new AtomicLong(Clock.defaultClock().getTick());
 
-    public static Route invalid(final String metric) {
-        throw new IllegalStateException("Unexpected, invalid route for metric: " + metric);
+    public static Route invalid(final String table) {
+        throw new IllegalStateException("Unexpected, invalid route for table: " + table);
     }
 
     public static Route of(final Endpoint endpoint) {
         return of(null, endpoint, null);
     }
 
-    public static Route of(final String metric, final Endpoint endpoint) {
-        return of(metric, endpoint, null);
+    public static Route of(final String table, final Endpoint endpoint) {
+        return of(table, endpoint, null);
     }
 
-    public static Route of(final String metric, final Endpoint endpoint, final Object ext) {
+    public static Route of(final String table, final Endpoint endpoint, final Object ext) {
         final Route r = new Route();
-        r.table = metric;
+        r.table = table;
         r.endpoint = endpoint;
         r.ext = ext;
         return r;
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java b/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java
index 20a6e11..267f0a9 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/RouterClient.java
@@ -184,6 +184,9 @@
                         ret = remote;
                     } else {
                         local.putAll(remote);
+                        for (String miss : misses) {
+                            local.putIfAbsent(miss, Route.of(miss, opts.getClusterAddress()));
+                        }
                         ret = local;
                     }
                     return ret;
@@ -197,7 +200,6 @@
 
     public CompletableFuture<Map<String, Route>> routeRefreshFor(final RequestContext reqCtx,
                                                                  final Collection<String> tables) {
-        final long startCall = Clock.defaultClock().getTick();
         return this.router.routeFor(reqCtx, tables).whenComplete((remote, err) -> {
             if (err == null) {
                 this.routeCache.putAll(remote);
diff --git a/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java b/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java
index 20f3d76..af2d27b 100644
--- a/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java
+++ b/ceresdb-protocol/src/main/java/io/ceresdb/WriteClient.java
@@ -149,7 +149,7 @@
 
         final CompletableFuture<WriteOk> respFuture = new CompletableFuture<>();
 
-        return this.routerClient.routeFor(reqCtx, Collections.singleton(table))
+        return this.routerClient.routeFor(finalReqCtx, Collections.singleton(table))
                 .thenApply(routes -> routes.values().stream().findFirst().orElseGet(() -> Route.invalid(table)))
                 .thenApply(route -> streamWriteTo(route, finalReqCtx, ctx, Utils.toUnaryObserver(respFuture)))
                 .thenApply(reqObserver -> new StreamWriteBuf<Point, WriteOk>() {