Procházet zdrojové kódy

HPCC-12251 Link cassandra plugin into wutest for easier debugging

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman před 10 roky
rodič
revize
f30ddbb09d

+ 1 - 2
common/workunit/CMakeLists.txt

@@ -62,6 +62,7 @@ HPCC_ADD_LIBRARY( workunit SHARED ${SRCS} )
 set_target_properties(workunit PROPERTIES 
     COMPILE_FLAGS -D_USRDLL
     DEFINE_SYMBOL WORKUNIT_EXPORTS )
+
 install ( TARGETS workunit RUNTIME DESTINATION ${EXEC_DIR} LIBRARY DESTINATION ${LIB_DIR} )
 target_link_libraries ( workunit 
          jlib 
@@ -72,5 +73,3 @@ target_link_libraries ( workunit
          deftype
          environment
     )
-
-

+ 7 - 0
common/workunit/workunit.cpp

@@ -2971,6 +2971,13 @@ void clientShutdownWorkUnit()
     factory.clear();
 }
 
+
+extern WORKUNIT_API void setWorkUnitFactory(IWorkUnitFactory * _factory)
+{
+    CriticalBlock b(factoryCrit);
+    factory.setown(_factory);
+}
+
 extern WORKUNIT_API IWorkUnitFactory * getWorkUnitFactory()
 {
     if (!factory)

+ 1 - 0
common/workunit/workunit.hpp

@@ -1362,6 +1362,7 @@ extern WORKUNIT_API StringBuffer &formatGraphTimerScope(StringBuffer &str, const
 extern WORKUNIT_API bool parseGraphTimerLabel(const char *label, StringAttr &graphName, unsigned & graphNum, unsigned &subGraphNum, unsigned &subId);
 extern WORKUNIT_API bool parseGraphScope(const char *scope, StringAttr &graphName, unsigned & graphNum, unsigned &subGraphId);
 extern WORKUNIT_API void addExceptionToWorkunit(IWorkUnit * wu, ErrorSeverity severity, const char * source, unsigned code, const char * text, const char * filename, unsigned lineno, unsigned column);
+extern WORKUNIT_API void setWorkUnitFactory(IWorkUnitFactory *_factory);
 extern WORKUNIT_API IWorkUnitFactory * getWorkUnitFactory();
 extern WORKUNIT_API IWorkUnitFactory * getWorkUnitFactory(ISecManager *secmgr, ISecUser *secuser);
 extern WORKUNIT_API ILocalWorkUnit* createLocalWorkUnit(const char *XML);

+ 8 - 2
ecl/wutest/CMakeLists.txt

@@ -39,6 +39,10 @@ include_directories (
     )
 
 ADD_DEFINITIONS( -D_CONSOLE )
+if ( FORCE_WORKUNITS_TO_CASSANDRA )
+  ADD_DEFINITIONS( -DFORCE_WORKUNITS_TO_CASSANDRA )
+endif()
+
 
 HPCC_ADD_EXECUTABLE ( wutest ${SRCS} )
 target_link_libraries ( wutest 
@@ -50,8 +54,10 @@ target_link_libraries ( wutest
          nbcd 
          eclrtl 
          deftype
-         cassandra 
          workunit 
     )
-
+    
+if ( FORCE_WORKUNITS_TO_CASSANDRA )
+  target_link_libraries ( wutest cassandraembed )
+endif ()
 

+ 20 - 3
ecl/wutest/wutest.cpp

@@ -17,6 +17,7 @@
 #include "jlib.hpp"
 #include "jfile.hpp"
 #include "jprop.hpp"
+#include "jptree.hpp"
 #include "jsocket.hpp"
 #include "workunit.hpp"
 #include "mpbase.hpp"
@@ -144,6 +145,9 @@ void testPagedWuList(IWorkUnitFactory *factory)
     }
 }
 
+#ifdef FORCE_WORKUNITS_TO_CASSANDRA
+extern "C" IWorkUnitFactory *createWorkUnitFactory(const IPropertyTree *props);
+#endif
 
 int main(int argc, const char *argv[])
 {
@@ -159,13 +163,26 @@ int main(int argc, const char *argv[])
         else
             globals->setProp("#action", argv[i]);
     }
+#ifdef FORCE_WORKUNITS_TO_CASSANDRA
+    StringBuffer cassandraServer;
+    if (globals->getProp("CASSANDRASERVER", cassandraServer))
+    {
+        // Statically linking to cassandra plugin makes debugging easier (and means can debug simple cassandra workunit interactions without needing dali running)
+        Owned<IPTree> props = createPTreeFromXMLString("<WorkUnitsServer><Option name='server' value='.'/></WorkUnitsServer>");
+        props->setProp("Option[@name='server']/@value", cassandraServer.str());
+        setWorkUnitFactory(createWorkUnitFactory(props));
+    }
+#endif
 
     StringBuffer daliServers;
     if (!globals->getProp("DALISERVERS", daliServers))
         daliServers.append(".");
-    Owned<IGroup> serverGroup = createIGroup(daliServers.str(), DALI_SERVER_PORT);
-    initClientProcess(serverGroup,DCR_Other);
-    setPasswordsFromSDS();
+    if (!strieq(daliServers, "none"))
+    {
+        Owned<IGroup> serverGroup = createIGroup(daliServers.str(), DALI_SERVER_PORT);
+        initClientProcess(serverGroup,DCR_Other);
+        setPasswordsFromSDS();
+    }
     try
     {
         CDateTime cutoff;

+ 5 - 1
plugins/cassandra/cassandraembed.cpp

@@ -105,7 +105,6 @@ public:
     }
     void setOptions(const StringArray &options)
     {
-        cluster = cass_cluster_new();
         const char *contact_points = "localhost";
         const char *user = "";
         const char *password = "";
@@ -3511,3 +3510,8 @@ extern "C" EXPORT IWorkUnitFactory *createWorkUnitFactory(const IPropertyTree *p
 {
     return new cassandraembed::CCasssandraWorkUnitFactory(props);
 }
+
+extern EXPORT void forceLinkCassandraEmbed()
+{
+    // Makes debugging easier...
+}