You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by gj...@apache.org on 2020/07/19 04:52:18 UTC

[phoenix] branch master updated: PHOENIX-6011:ServerCacheClient throw NullPointerException (#836)

This is an automated email from the ASF dual-hosted git repository.

gjacoby pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/master by this push:
     new 6a29349  PHOENIX-6011:ServerCacheClient throw NullPointerException (#836)
6a29349 is described below

commit 6a293496ba0bb264964ea9d124bc624c14db32ce
Author: wangchao316 <66...@users.noreply.github.com>
AuthorDate: Sun Jul 19 12:52:09 2020 +0800

    PHOENIX-6011:ServerCacheClient throw NullPointerException (#836)
---
 .../apache/phoenix/cache/ServerCacheClient.java    |  3 ++
 .../phoenix/cache/ServerCacheClientTest.java       | 47 ++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java b/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
index d6483b8..600c74b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/cache/ServerCacheClient.java
@@ -336,6 +336,9 @@ public class ServerCacheClient {
         } finally {
             try {
                 if (!success) {
+                    if (hashCacheSpec != null) {
+                        SQLCloseables.closeAllQuietly(Collections.singletonList(hashCacheSpec));
+                    }
                     SQLCloseables.closeAllQuietly(Collections.singletonList(hashCacheSpec));
                     for (Future<Boolean> future : futures) {
                         future.cancel(true);
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/cache/ServerCacheClientTest.java b/phoenix-core/src/test/java/org/apache/phoenix/cache/ServerCacheClientTest.java
new file mode 100644
index 0000000..496fb1c
--- /dev/null
+++ b/phoenix-core/src/test/java/org/apache/phoenix/cache/ServerCacheClientTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ */
+package org.apache.phoenix.cache;
+
+import static org.junit.Assert.assertEquals;
+
+import java.sql.SQLException;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.phoenix.jdbc.PhoenixConnection;
+import org.apache.phoenix.query.ConnectionQueryServices;
+import org.apache.phoenix.schema.PNameFactory;
+import org.apache.phoenix.schema.PTableImpl;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class ServerCacheClientTest {
+    @Test
+    public void testAddServerCache() throws SQLException {
+        PhoenixConnection connection = Mockito.mock(PhoenixConnection.class);
+        ConnectionQueryServices services = Mockito.mock(ConnectionQueryServices.class);
+        Mockito.when(services.getExecutor()).thenReturn(null);
+        Mockito.when(connection.getQueryServices()).thenReturn(services);
+        byte[] tableName = Bytes.toBytes("TableName");
+        PTableImpl pTable =  Mockito.mock(PTableImpl.class);
+        Mockito.when(pTable.getPhysicalName()).thenReturn(PNameFactory.newName("TableName"));
+        Mockito.when(services.getAllTableRegions(tableName)).thenThrow(new SQLException("Test Exception"));
+        ServerCacheClient client = new ServerCacheClient(connection);
+        try {
+            client.addServerCache(null, null, null, null, pTable, false);
+        } catch (Exception e) {
+            assertEquals(e.getMessage(), "Test Exception");
+        }
+    }
+}