Skip to content

Commit

Permalink
update to 0.9.35-beta
Browse files Browse the repository at this point in the history
  • Loading branch information
bersler committed Dec 1, 2021
1 parent a0c2289 commit 83da58b
Show file tree
Hide file tree
Showing 42 changed files with 440 additions and 222 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
0.9.35-beta
- fixed bug: throwing exception in constructor [#28]
- fixed bug: throwing exception in callback functions for Kakfa module
- fixed bug: error "split undo is broken" when undo for op code 11.22 split
- fixed bug: reading from standby redo log files failed during switch
- optimized Oracle connection handling

0.9.34-beta
- fixed bug: reading from standby database
- removed distinct config for standby database: "online-standby" is not required, use "online" instead
Expand Down
20 changes: 10 additions & 10 deletions configure
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for OpenLogReplicator 0.9.34-beta.
# Generated by GNU Autoconf 2.69 for OpenLogReplicator 0.9.35-beta.
#
# Report bugs to <[email protected]>.
#
Expand Down Expand Up @@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='OpenLogReplicator'
PACKAGE_TARNAME='openlogreplicator'
PACKAGE_VERSION='0.9.34-beta'
PACKAGE_STRING='OpenLogReplicator 0.9.34-beta'
PACKAGE_VERSION='0.9.35-beta'
PACKAGE_STRING='OpenLogReplicator 0.9.35-beta'
PACKAGE_BUGREPORT='[email protected]'
PACKAGE_URL=''

Expand Down Expand Up @@ -1355,7 +1355,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures OpenLogReplicator 0.9.34-beta to adapt to many kinds of systems.
\`configure' configures OpenLogReplicator 0.9.35-beta to adapt to many kinds of systems.

Usage: $0 [OPTION]... [VAR=VALUE]...

Expand Down Expand Up @@ -1427,7 +1427,7 @@ fi

if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of OpenLogReplicator 0.9.34-beta:";;
short | recursive ) echo "Configuration of OpenLogReplicator 0.9.35-beta:";;
esac
cat <<\_ACEOF

Expand Down Expand Up @@ -1548,7 +1548,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
OpenLogReplicator configure 0.9.34-beta
OpenLogReplicator configure 0.9.35-beta
generated by GNU Autoconf 2.69

Copyright (C) 2012 Free Software Foundation, Inc.
Expand Down Expand Up @@ -2453,7 +2453,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by OpenLogReplicator $as_me 0.9.34-beta, which was
It was created by OpenLogReplicator $as_me 0.9.35-beta, which was
generated by GNU Autoconf 2.69. Invocation command line was

$ $0 $@
Expand Down Expand Up @@ -4716,7 +4716,7 @@ fi

# Define the identity of the package.
PACKAGE='openlogreplicator'
VERSION='0.9.34-beta'
VERSION='0.9.35-beta'


cat >>confdefs.h <<_ACEOF
Expand Down Expand Up @@ -17691,7 +17691,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by OpenLogReplicator $as_me 0.9.34-beta, which was
This file was extended by OpenLogReplicator $as_me 0.9.35-beta, which was
generated by GNU Autoconf 2.69. Invocation command line was

CONFIG_FILES = $CONFIG_FILES
Expand Down Expand Up @@ -17757,7 +17757,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
OpenLogReplicator config.status 0.9.34-beta
OpenLogReplicator config.status 0.9.35-beta
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#<http://www.gnu.org/licenses/>.

AC_PREREQ(2.68)
AC_INIT([OpenLogReplicator],[0.9.34-beta],[[email protected]])
AC_INIT([OpenLogReplicator],[0.9.35-beta],[[email protected]])
AC_USE_SYSTEM_EXTENSIONS
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_AUX_DIR(config)
Expand Down
2 changes: 1 addition & 1 deletion libtool
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#! /bin/bash
# Generated automatically by config.status (openlogreplicator) 0.9.34-beta
# Generated automatically by config.status (openlogreplicator) 0.9.35-beta
# NOTE: Changes made to this file will be lost: look at ltmain.sh.

# Provide generalized library-building support services.
Expand Down
31 changes: 26 additions & 5 deletions src/DatabaseConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,28 @@ along with OpenLogReplicator; see the file LICENSE; If not see
using namespace std;

namespace OpenLogReplicator {
DatabaseConnection::DatabaseConnection(DatabaseEnvironment* env, string& user, string& password, string& server, bool sysASM) :
DatabaseConnection::DatabaseConnection(DatabaseEnvironment* env, const char* user, const char* password, const char* connectString, bool sysASM) :
user(user),
password(password),
connectString(connectString),
sysASM(sysASM),
connected(false),
env(env),
errhp(nullptr),
srvhp(nullptr),
svchp(nullptr),
authp(nullptr) {
}

void DatabaseConnection::connect(void) {
disconnect();

OCIHandleAlloc((dvoid*) env->envhp, (dvoid**) &errhp, OCI_HTYPE_ERROR, 0, nullptr);
OCIHandleAlloc((dvoid*) env->envhp, (dvoid**) &srvhp, OCI_HTYPE_SERVER, 0, nullptr);
OCIHandleAlloc((dvoid*) env->envhp, (dvoid**) &svchp, OCI_HTYPE_SVCCTX, 0, nullptr);
OCIHandleAlloc((dvoid*) env->envhp, (dvoid**) &authp, OCI_HTYPE_SESSION, 0, nullptr);

env->checkErr(errhp, OCIServerAttach(srvhp, errhp, (const OraText*) server.c_str(), server.length(), OCI_DEFAULT));
env->checkErr(errhp, OCIServerAttach(srvhp, errhp, (const OraText*) connectString.c_str(), connectString.length(), OCI_DEFAULT));
env->checkErr(errhp, OCIAttrSet((dvoid*) svchp, OCI_HTYPE_SVCCTX, srvhp, 0, OCI_ATTR_SERVER, (OCIError*) errhp));
env->checkErr(errhp, OCIAttrSet((dvoid*) authp, OCI_HTYPE_SESSION, (dvoid*) user.c_str(), user.length(), OCI_ATTR_USERNAME, (OCIError*) errhp));
env->checkErr(errhp, OCIAttrSet((dvoid*) authp, OCI_HTYPE_SESSION, (dvoid*) password.c_str(), password.length(), OCI_ATTR_PASSWORD, (OCIError*) errhp));
Expand All @@ -46,11 +55,16 @@ namespace OpenLogReplicator {
env->checkErr(errhp, OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT));

env->checkErr(errhp, OCIAttrSet((dvoid*) svchp, OCI_HTYPE_SVCCTX, (dvoid*) authp, 0, OCI_ATTR_SESSION, errhp));

connected = true;
}

DatabaseConnection::~DatabaseConnection() {
OCISessionEnd(svchp, errhp, nullptr, OCI_DEFAULT);
OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
void DatabaseConnection::disconnect(void) {
if (svchp != nullptr && errhp != nullptr)
OCISessionEnd(svchp, errhp, nullptr, OCI_DEFAULT);

if (svchp != nullptr && errhp != nullptr)
OCIServerDetach(srvhp, errhp, OCI_DEFAULT);

if (authp != nullptr) {
OCIHandleFree((dvoid*) authp, OCI_HTYPE_SESSION);
Expand All @@ -76,5 +90,12 @@ namespace OpenLogReplicator {
OCIHandleFree((dvoid*) errhp, OCI_HTYPE_ERROR);
errhp = nullptr;
}

connected = false;
}

DatabaseConnection::~DatabaseConnection() {
if (connected)
disconnect();
}
}
13 changes: 10 additions & 3 deletions src/DatabaseConnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,23 @@ namespace OpenLogReplicator {
class DatabaseEnvironment;

class DatabaseConnection {
protected:

public:
string user;
string password;
string connectString;
bool sysASM;
bool connected;

DatabaseEnvironment* env;
OCIError* errhp;
OCIServer* srvhp;
OCISvcCtx* svchp;
OCISession* authp;

DatabaseConnection(DatabaseEnvironment* env, string& user, string& password, string& server, bool sysASM);
void connect(void);
void disconnect(void);

DatabaseConnection(DatabaseEnvironment* env, const char* user, const char* password, const char* connectString, bool sysASM);
virtual ~DatabaseConnection();
};
}
Expand Down
10 changes: 8 additions & 2 deletions src/DatabaseEnvironment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ using namespace std;
namespace OpenLogReplicator {
DatabaseEnvironment::DatabaseEnvironment() :
envhp(nullptr) {

OCIEnvCreate(&envhp, OCI_THREADED, nullptr, nullptr, nullptr, nullptr, 0, nullptr);
}

DatabaseEnvironment::~DatabaseEnvironment() {
Expand All @@ -35,6 +33,14 @@ namespace OpenLogReplicator {
//OCITerminate(OCI_DEFAULT);
}

void DatabaseEnvironment::initialize(void) {
OCIEnvCreate(&envhp, OCI_THREADED, nullptr, nullptr, nullptr, nullptr, 0, nullptr);

if (envhp == nullptr) {
RUNTIME_FAIL("error initializing oracle environment (OCI)");
}
}

void DatabaseEnvironment::checkErr(OCIError* errhp, sword status) {
sb4 errcode = 0;
uint64_t len;
Expand Down
1 change: 1 addition & 0 deletions src/DatabaseEnvironment.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ namespace OpenLogReplicator {
DatabaseEnvironment();
virtual ~DatabaseEnvironment();

void initialize(void);
void checkErr(OCIError* errhp, sword status);
};
}
Expand Down
1 change: 1 addition & 0 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ OpCode0B08.cpp \
OpCode0B0B.cpp \
OpCode0B0C.cpp \
OpCode0B10.cpp \
OpCode0B16.cpp \
OpCode1801.cpp \
OpCode.cpp \
OpenLogReplicator.cpp \
Expand Down
37 changes: 21 additions & 16 deletions src/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -155,12 +155,12 @@ am__OpenLogReplicator_SOURCES_DIST = CharacterSet16bit.cpp \
OpCode0502.cpp OpCode0504.cpp OpCode0506.cpp OpCode050B.cpp \
OpCode0513.cpp OpCode0514.cpp OpCode0B02.cpp OpCode0B03.cpp \
OpCode0B04.cpp OpCode0B05.cpp OpCode0B06.cpp OpCode0B08.cpp \
OpCode0B0B.cpp OpCode0B0C.cpp OpCode0B10.cpp OpCode1801.cpp \
OpCode.cpp OpenLogReplicator.cpp OracleAnalyzer.cpp \
OracleAnalyzerBatch.cpp OracleColumn.cpp OracleIncarnation.cpp \
OracleObject.cpp OutputBuffer.cpp OutputBufferJson.cpp \
Reader.cpp ReaderFilesystem.cpp RedoLog.cpp \
RedoLogException.cpp RedoLogRecord.cpp RowId.cpp \
OpCode0B0B.cpp OpCode0B0C.cpp OpCode0B10.cpp OpCode0B16.cpp \
OpCode1801.cpp OpCode.cpp OpenLogReplicator.cpp \
OracleAnalyzer.cpp OracleAnalyzerBatch.cpp OracleColumn.cpp \
OracleIncarnation.cpp OracleObject.cpp OutputBuffer.cpp \
OutputBufferJson.cpp Reader.cpp ReaderFilesystem.cpp \
RedoLog.cpp RedoLogException.cpp RedoLogRecord.cpp RowId.cpp \
RuntimeException.cpp Schema.cpp SchemaElement.cpp State.cpp \
StateDisk.cpp SysCCol.cpp SysCDef.cpp SysCol.cpp \
SysDeferredStg.cpp SysECol.cpp SysObj.cpp SysTab.cpp \
Expand Down Expand Up @@ -206,12 +206,13 @@ am_OpenLogReplicator_OBJECTS = CharacterSet16bit.$(OBJEXT) \
OpCode0514.$(OBJEXT) OpCode0B02.$(OBJEXT) OpCode0B03.$(OBJEXT) \
OpCode0B04.$(OBJEXT) OpCode0B05.$(OBJEXT) OpCode0B06.$(OBJEXT) \
OpCode0B08.$(OBJEXT) OpCode0B0B.$(OBJEXT) OpCode0B0C.$(OBJEXT) \
OpCode0B10.$(OBJEXT) OpCode1801.$(OBJEXT) OpCode.$(OBJEXT) \
OpenLogReplicator.$(OBJEXT) OracleAnalyzer.$(OBJEXT) \
OracleAnalyzerBatch.$(OBJEXT) OracleColumn.$(OBJEXT) \
OracleIncarnation.$(OBJEXT) OracleObject.$(OBJEXT) \
OutputBuffer.$(OBJEXT) OutputBufferJson.$(OBJEXT) \
Reader.$(OBJEXT) ReaderFilesystem.$(OBJEXT) RedoLog.$(OBJEXT) \
OpCode0B10.$(OBJEXT) OpCode0B16.$(OBJEXT) OpCode1801.$(OBJEXT) \
OpCode.$(OBJEXT) OpenLogReplicator.$(OBJEXT) \
OracleAnalyzer.$(OBJEXT) OracleAnalyzerBatch.$(OBJEXT) \
OracleColumn.$(OBJEXT) OracleIncarnation.$(OBJEXT) \
OracleObject.$(OBJEXT) OutputBuffer.$(OBJEXT) \
OutputBufferJson.$(OBJEXT) Reader.$(OBJEXT) \
ReaderFilesystem.$(OBJEXT) RedoLog.$(OBJEXT) \
RedoLogException.$(OBJEXT) RedoLogRecord.$(OBJEXT) \
RowId.$(OBJEXT) RuntimeException.$(OBJEXT) Schema.$(OBJEXT) \
SchemaElement.$(OBJEXT) State.$(OBJEXT) StateDisk.$(OBJEXT) \
Expand Down Expand Up @@ -289,8 +290,9 @@ am__depfiles_remade = ./$(DEPDIR)/CharacterSet.Po \
./$(DEPDIR)/OpCode0B05.Po ./$(DEPDIR)/OpCode0B06.Po \
./$(DEPDIR)/OpCode0B08.Po ./$(DEPDIR)/OpCode0B0B.Po \
./$(DEPDIR)/OpCode0B0C.Po ./$(DEPDIR)/OpCode0B10.Po \
./$(DEPDIR)/OpCode1801.Po ./$(DEPDIR)/OpenLogReplicator.Po \
./$(DEPDIR)/OraProtoBuf.pb.Po ./$(DEPDIR)/OracleAnalyzer.Po \
./$(DEPDIR)/OpCode0B16.Po ./$(DEPDIR)/OpCode1801.Po \
./$(DEPDIR)/OpenLogReplicator.Po ./$(DEPDIR)/OraProtoBuf.pb.Po \
./$(DEPDIR)/OracleAnalyzer.Po \
./$(DEPDIR)/OracleAnalyzerBatch.Po \
./$(DEPDIR)/OracleAnalyzerOnline.Po \
./$(DEPDIR)/OracleAnalyzerOnlineASM.Po \
Expand Down Expand Up @@ -499,8 +501,8 @@ OpenLogReplicator_SOURCES = CharacterSet16bit.cpp CharacterSet7bit.cpp \
OpCode0504.cpp OpCode0506.cpp OpCode050B.cpp OpCode0513.cpp \
OpCode0514.cpp OpCode0B02.cpp OpCode0B03.cpp OpCode0B04.cpp \
OpCode0B05.cpp OpCode0B06.cpp OpCode0B08.cpp OpCode0B0B.cpp \
OpCode0B0C.cpp OpCode0B10.cpp OpCode1801.cpp OpCode.cpp \
OpenLogReplicator.cpp OracleAnalyzer.cpp \
OpCode0B0C.cpp OpCode0B10.cpp OpCode0B16.cpp OpCode1801.cpp \
OpCode.cpp OpenLogReplicator.cpp OracleAnalyzer.cpp \
OracleAnalyzerBatch.cpp OracleColumn.cpp OracleIncarnation.cpp \
OracleObject.cpp OutputBuffer.cpp OutputBufferJson.cpp \
Reader.cpp ReaderFilesystem.cpp RedoLog.cpp \
Expand Down Expand Up @@ -653,6 +655,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OpCode0B0B.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OpCode0B0C.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OpCode0B10.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OpCode0B16.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OpCode1801.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OpenLogReplicator.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OraProtoBuf.pb.Po@am__quote@ # am--include-marker
Expand Down Expand Up @@ -905,6 +908,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/OpCode0B0B.Po
-rm -f ./$(DEPDIR)/OpCode0B0C.Po
-rm -f ./$(DEPDIR)/OpCode0B10.Po
-rm -f ./$(DEPDIR)/OpCode0B16.Po
-rm -f ./$(DEPDIR)/OpCode1801.Po
-rm -f ./$(DEPDIR)/OpenLogReplicator.Po
-rm -f ./$(DEPDIR)/OraProtoBuf.pb.Po
Expand Down Expand Up @@ -1041,6 +1045,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/OpCode0B0B.Po
-rm -f ./$(DEPDIR)/OpCode0B0C.Po
-rm -f ./$(DEPDIR)/OpCode0B10.Po
-rm -f ./$(DEPDIR)/OpCode0B16.Po
-rm -f ./$(DEPDIR)/OpCode1801.Po
-rm -f ./$(DEPDIR)/OpenLogReplicator.Po
-rm -f ./$(DEPDIR)/OraProtoBuf.pb.Po
Expand Down
49 changes: 49 additions & 0 deletions src/OpCode0B16.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/* Oracle Redo OpCode: 11.22
Copyright (C) 2018-2021 Adam Leszczynski ([email protected])
This file is part of OpenLogReplicator.
OpenLogReplicator is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 3, or (at your option)
any later version.
OpenLogReplicator is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenLogReplicator; see the file LICENSE; If not see
<http://www.gnu.org/licenses/>. */

#include "OpCode0B16.h"
#include "OracleAnalyzer.h"
#include "RedoLogRecord.h"

using namespace std;

namespace OpenLogReplicator {
OpCode0B16::OpCode0B16(OracleAnalyzer* oracleAnalyzer, RedoLogRecord* redoLogRecord) :
OpCode(oracleAnalyzer, redoLogRecord) {
}

OpCode0B16::~OpCode0B16() {
}

void OpCode0B16::process(void) {
OpCode::process();
uint64_t fieldPos = 0;
typeFIELD fieldNum = 0;
uint16_t fieldLength = 0;

oracleAnalyzer->nextField(redoLogRecord, fieldNum, fieldPos, fieldLength, 0x0B1601);
//field: 1
ktbRedo(fieldPos, fieldLength);

if (!oracleAnalyzer->nextFieldOpt(redoLogRecord, fieldNum, fieldPos, fieldLength, 0x0B1602))
return;
//field: 2
kdoOpCode(fieldPos, fieldLength);
}
}
Loading

0 comments on commit 83da58b

Please sign in to comment.