This seems like a reasonable 1st step, that would solve current upgrade issues. I suggest you submit this patch, close the current jira, and submit a new future improvement jira noting what would have to be done to eek out the last few bits (or documenting it somewhere appropriate in the code is also fine - just rather not see you have learned lost). Given that this soft upgrade stuff is new I would rather be safe this time.
/mikem
Suresh Thalamati wrote:
By looking at the code , it is kind of tricky to handle upgrade, because users can crash in the middle of recovery
and reboot again N times , which can generate new log for uncommitted transaction and also all the constant that manipulates LSN
are static now and are used by static routines in org.apache.derby.impl.store.raw.log.LogCounter.java, like :makeLogInstantAsLong().
To handle upgrade:
1) all static methods in LogCounter.java has to be replaced by instance methods , so that
in the same JVM, one can run a database that is in softupgrade mode and one that is new/upgraded..
2) modify the code to update the version number on disk(log control file ) to only when the recovery is complete;
currently it is updated in the boot code itself.
3) perform a checkpoint after recovery on upgrade, so that new log file limits can be uses, As it will make
sure that no old log instant format will be in use.
Instead of doing all of the above , I can reduce the limit to 2^31 -1 instead of 2^33-1 ;
this way I would not need to change LogCounter.FILE_NUMBER_SHIFT from 32 (old value) to 30,
which causes all upgrade issues.
with 2^31 -1 it will take approximately 68 years (2147483647/(24 * 60 * 60 * 365))
to hit the log file number limit if a new log file is generated every second., instead of 272 years
with 2^33-1.
If no one has objections , I would prefer to increase the log file number limit to 2^31 -1 and
avoid major upgrade issues. If any one strongly believes it should be 2^33 -1 , I will try
to do the necessary upgrade changes.
Any comments/suggestions ?
Thanks -suresht
Suresh Thalamati wrote:
I just realized , this patch actaully break's hard upgrade also, if log needs to be replayed.
Becuase I extract the log file number and log file postion from the instant that is on disk ,
differently after my change.
If any one else on the list is testing upgrade is hitting this problem, please let me know.
I can post a patch to backout the portion that cause upgrade issues.
Thanks -suresht
Mike Matrigali wrote:
I am looking at committing this. The changes look good to me, but I believe there are upgrade issues to handle.
For a hard upgrade either new or old databases are fine. For a soft upgrade I think there is a problem if the db generates enough log files to start using the new bits, and then the software is reverted to before the fix.
Seems like using the bits needs to be somehow only enabled for hard upgrade. It would be best if it was controlled just by hard upgrade, but if that is not possible then just doing it for databases created since this version would also work - but still leave problems with old hard upgraded databases.
I have reviewed the code and am running tests. I plan on committing this part of the fix and let you address upgrade issues with a follow on patch.
Suresh Thalamati wrote: