Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-11795

JDBC thin datastreamer don't throws exception is case of problems on closing streamer.

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: 2.8
    • Component/s: jdbc, sql, thin client
    • Labels:
      None
    • Ignite Flags:
      Docs Required

      Description

      Now from code we can't detect problems, If some errors occurs in closing jdbc thin datastreamer. Now we could detect it in logs only. The main reason of this is using U.close() for streamers in SqlClientContext#disableStreaming().

      You could add test to JdbcThinStreamingAbstractSelfTest and reproduce problem.

          /**
           * @throws Exception if failed.
           */
          @Test
          public void testStreamedInsertFailsOnReadOnlyMode() throws Exception {
              for (Ignite grid : G.allGrids())
                  ((IgniteEx) grid).context().cache().context().readOnlyMode(true);
      
              try {
                  boolean failed = false;
      
                  try (Connection ordinalCon = createOrdinaryConnection();
                       Statement selectStmt = ordinalCon.createStatement()
                  ) {
                      try (ResultSet rs = selectStmt.executeQuery("select count(*) from PUBLIC.Person")) {
                          assertTrue(rs.next());
      
                          assertEquals(0, rs.getLong(1));
                      }
      
                      try (Connection conn = createStreamedConnection(true)) {
                          try (PreparedStatement stmt =
                                   conn.prepareStatement("insert into PUBLIC.Person(\"id\", \"name\") values (?, ?)")
                          ) {
                              for (int i = 1; i <= 2; i++) {
                                  stmt.setInt(1, i);
                                  stmt.setString(2, nameForId(i));
      
                                  stmt.executeUpdate();
                              }
                          }
                      }
                      catch (Exception e) {
                          log.error("Insert failed", e);
      
                          failed = true;
                      }
      
                      try (ResultSet rs = selectStmt.executeQuery("select count(*) from PUBLIC.Person")) {
                          assertTrue(rs.next());
      
                          assertEquals("Insert should be failed!", 0, rs.getLong(1));
                      }
                  }
      
                  assertTrue("Insert should be failed!", failed);
              }
              finally {
                  for (Ignite grid : G.allGrids())
                      ((IgniteEx) grid).context().cache().context().readOnlyMode(false);
              }
          }
      

      Don't forget remove @Ignore annotation from JdbcThinStreamingAbstractSelfTest#testStreamedInsertFailsOnReadOnlyMode() test!

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                antonovsergey93 Sergey Antonov
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated: