Alon Bar-Lev has posted comments on this change.
Change subject: bootstrap: rewrite bootstrap using the new ovirt-host-deploy
package
......................................................................
Patch Set 11: (27 inline comments)
Thanks for review!
> I would suggest to break the 1030 lines of the VdsDeploy class in some
> smaller classes.
Can you please suggest how to split it?
I don't want to see the customization dialog and termination dialog out...
these are the reason the code is long, but are as if they are written in-line.
Other than that I don't see any atomic logic I can split out.
Thanks!
....................................................
File
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsDeploy.java
Line 65: */
Line 66: public class VdsDeploy implements SSHDialog.Sink {
Line 67:
Line 68: private static final int BUFFER_SIZE = 10 * 1024;
Line 69: private static final int THREAD_JOIN_TIMEOUT = 20 * 1000;
Added comment.
Line 70: private static final String IPTABLE_CUSTOM_RULES_PLACE_HOLDER =
"@CUSTOM_RULES@";
Line 71: private static final String
BOOTSTRAP_CUSTOM_ENVIRONMENT_PLACE_HOLDER = "@ENVIRONMENT@";
Line 72:
Line 73: private static Log log = LogFactory.getLog(VdsDeploy.class);
Line 66: public class VdsDeploy implements SSHDialog.Sink {
Line 67:
Line 68: private static final int BUFFER_SIZE = 10 * 1024;
Line 69: private static final int THREAD_JOIN_TIMEOUT = 20 * 1000;
Line 70: private static final String IPTABLE_CUSTOM_RULES_PLACE_HOLDER =
"@CUSTOM_RULES@";
fixed (as-is in previous code...)
Line 71: private static final String
BOOTSTRAP_CUSTOM_ENVIRONMENT_PLACE_HOLDER = "@ENVIRONMENT@";
Line 72:
Line 73: private static Log log = LogFactory.getLog(VdsDeploy.class);
Line 74: private static CachedTar s_bootstrapPackage;
Line 69: private static final int THREAD_JOIN_TIMEOUT = 20 * 1000;
Line 70: private static final String IPTABLE_CUSTOM_RULES_PLACE_HOLDER =
"@CUSTOM_RULES@";
Line 71: private static final String
BOOTSTRAP_CUSTOM_ENVIRONMENT_PLACE_HOLDER = "@ENVIRONMENT@";
Line 72:
Line 73: private static Log log = LogFactory.getLog(VdsDeploy.class);
Done
Line 74: private static CachedTar s_bootstrapPackage;
Line 75: private static File s_bootstrapLogDir;
Line 76:
Line 77: private SSHDialog.Control _control;
Line 74: private static CachedTar s_bootstrapPackage;
Line 75: private static File s_bootstrapLogDir;
Line 76:
Line 77: private SSHDialog.Control _control;
Line 78: private Thread _thread;
For handling the dialog.
Line 79: private EngineSSHDialog _dialog;
Line 80: private MachineDialogParser _parser;
Line 81: private final InstallerMessages _messages;
Line 82:
Line 80: private MachineDialogParser _parser;
Line 81: private final InstallerMessages _messages;
Line 82:
Line 83: private VDS _vds;
Line 84: private boolean _node = false;
isNode it is.
Line 85: private boolean _reboot = false;
Line 86: private Exception _failException = null;
Line 87: private boolean _resultError = false;
Line 88: private boolean _goingToReboot = false;
Line 96: * set vds object with unique id.
Line 97: * @param vdsmid unique id read from host.
Line 98: *
Line 99: * Check if vdsmid is unique, if not, halt installation, otherwise
Line 100: * update the vds object.
Done. This is why I like doxygen better :)
Line 101: */
Line 102: private void _setVdsmId(String vdsmid) {
Line 103: if (vdsmid == null) {
Line 104: throw new SoftError("Cannot acquire node id");
Line 98: *
Line 99: * Check if vdsmid is unique, if not, halt installation, otherwise
Line 100: * update the vds object.
Line 101: */
Line 102: private void _setVdsmId(String vdsmid) {
Right. If it ever get public, then the _ will be removed as it is not private.
Line 103: if (vdsmid == null) {
Line 104: throw new SoftError("Cannot acquire node id");
Line 105: }
Line 106:
Line 109: _vds.gethost_name(),
Line 110: vdsmid
Line 111: );
Line 112:
Line 113: List<VDS> list = LinqUtils.filter(
list is local variable....
Line 114:
DbFacade.getInstance().getVdsDao().getAllWithUniqueId(vdsmid),
Line 115: new Predicate<VDS>() {
Line 116: @Override
Line 117: public boolean eval(VDS vds) {
Line 120: }
Line 121: );
Line 122:
Line 123: if (!list.isEmpty()) {
Line 124: StringBuffer hosts = new StringBuffer(1024);
Done
Line 125: for (VDS v : list) {
Line 126: if (hosts.length() > 0) {
Line 127: hosts.append(", ");
Line 128: }
Line 176: /**
Line 177: * Set vds object status.
Line 178: * @param status new status.
Line 179: *
Line 180: * For this simple task, no need to go via command mechanism.
Done
Line 181: */
Line 182: private void _setVdsStatus(VDSStatus status) {
Line 183: _vds.setstatus(status);
Line 184:
Line 204: in = new FileInputStream(keystoreFile);
Line 205: KeyStore ks = KeyStore.getInstance("PKCS12");
Line 206: ks.load(
Line 207: in,
Line 208:
Config.<String>GetValue(ConfigValues.keystorePass).toCharArray()
Done
Line 209: );
Line 210:
Line 211: Certificate cert = ks.getCertificate(alias);
Line 212: if (cert == null) {
Line 288: * Customization vector.
Line 289: * This is tick based vector, every event execute the next
Line 290: * tick.
Line 291: */
Line 292: private Callable _customizationDialog[] = new Callable[] {
Did not know that, I saw both notation. Fixed.
Line 293: new Callable<Object>() { public Object call() throws
Exception {
Line 294: if (
Line 295: (Boolean)_parser.cliEnvironmentGet(
Line 296: VdsmEnv.OVIRT_NODE
Line 291: */
Line 292: private Callable _customizationDialog[] = new Callable[] {
Line 293: new Callable<Object>() { public Object call() throws
Exception {
Line 294: if (
Line 295: (Boolean)_parser.cliEnvironmentGet(
How? I need a boolean here...
Line 296: VdsmEnv.OVIRT_NODE
Line 297: )
Line 298: ) {
Line 299: _messages.post(
Line 297: )
Line 298: ) {
Line 299: _messages.post(
Line 300: InstallerMessages.Severity.INFO,
Line 301: "Host is hypervisor"
As far as I understand both falls into the term "hypervisor".
Line 302: );
Line 303: _setNode();
Line 304: }
Line 305: return null;
Line 382: }},
Line 383: new Callable<Object>() { public Object call() throws
Exception {
Line 384: _parser.cliEnvironmentSet(
Line 385: VdsmEnv.ENGINE_HOST,
Line 386: new URL(Config.<String>
GetValue(ConfigValues.VdcBootStrapUrl)).getHost()
Why? the config value is kept to it may be changed. Do you want to obsolete the
VdcBootstrapUrl?
Line 387: );
Line 388: return null;
Line 389: }},
Line 390: new Callable<Object>() { public Object call() throws
Exception {
Line 389: }},
Line 390: new Callable<Object>() { public Object call() throws
Exception {
Line 391: _parser.cliEnvironmentSet(
Line 392: VdsmEnv.ENGINE_PORT,
Line 393: new URL(Config.<String>
GetValue(ConfigValues.VdcBootStrapUrl)).getPort()
Same as above, are we sure we want to change this at this point?
Line 394: );
Line 395: return null;
Line 396: }},
Line 397: new Callable<Object>() { public Object call() throws
Exception {
Line 426: }},
Line 427: new Callable<Object>() { public Object call() throws
Exception {
Line 428: _parser.cliEnvironmentSet(
Line 429: VdsmEnv.CERTIFICATE_ENROLLMENT,
Line 430:
org.ovirt.ovirt_host_deploy.constants.Const.CERTIFICATE_ENROLLMENT_INLINE
Because there is a conflict, and java does not support scope rename.
Line 431: );
Line 432: return null;
Line 433: }},
Line 434: new Callable<Object>() { public Object call() throws
Exception {
Line 436: _vds.getvds_group_id()
Line 437: );
Line 438: _parser.cliEnvironmentSet(
Line 439: GlusterEnv.ENABLE,
Line 440: vdsGroup.supportsGlusterService() != false
Right, sorry.
Line 441: );
Line 442: return null;
Line 443: }},
Line 444: new Callable<Object>() { public Object call() throws
Exception {
Line 453: "Enfocing host reboot"
Line 454: );
Line 455: }
Line 456: _parser.cliEnvironmentSet(
Line 457:
org.ovirt.ovirt_host_deploy.constants.CoreEnv.FORCE_REBOOT,
Namespace conflict.
Line 458: reboot
Line 459: );
Line 460: return null;
Line 461: }},
Line 462: new Callable<Object>() { public Object call() throws
Exception {
Line 463: _parser.cliInstall();
Line 464: return null;
Line 465: }},
Line 466: null
Yes, but it will make my life easier if I just iterate through elements.
But this is not the real reason... the real reason is that I want to able to
add new elements without touching the ',' of existing code. Patches will be
cleaner.
Line 467: };
Line 468: /**
Line 469: * Execute the next customization vector entry.
Line 470: */
Line 473: if (_customizationShouldAbort) {
Line 474: _parser.cliAbort();
Line 475: }
Line 476: else {
Line 477: _customizationDialog[_customizationIndex++].call();
I don't.
If there is an error of such the exception is perfectly OK. It should exit
because of the sequence.
Line 478: }
Line 479: }
Line 480: catch (SoftError e) {
Line 481: log.errorFormat(
Line 500: * Termination vector.
Line 501: * This is tick based vector, every event execute the next
Line 502: * tick.
Line 503: */
Line 504: private Callable _terminationDialog[] = new Callable[] {
Done
Line 505: new Callable<Object>() { public Object call() throws
Exception {
Line 506: _resultError = (Boolean)_parser.cliEnvironmentGet(
Line 507: BaseEnv.ERROR
Line 508: );
Line 605: new Callable<Object>() { public Object call() throws
Exception {
Line 606: _parser.cliQuit();
Line 607: return null;
Line 608: }},
Line 609: null
Same as above, no need to repeat comments.
Line 610: };
Line 611: /**
Line 612: * Execute the next termination vector entry.
Line 613: */
Line 611: /**
Line 612: * Execute the next termination vector entry.
Line 613: */
Line 614: private void _nextTerminationEntry() throws Exception {
Line 615: _terminationDialog[_terminationIndex++].call();
Same as above.
Line 616: }
Line 617:
Line 618: /**
Line 619: * Dialog implementation.
Line 646: severity =
InstallerMessages.Severity.WARNING;
Line 647: break;
Line 648: default:
Line 649: severity =
InstallerMessages.Severity.ERROR;
Line 650: break;
Sorry, I missed this one.
Line 651: }
Line 652: _messages.post(severity, event.record);
Line 653: }
Line 654: else if (bevent instanceof Event.Confirm) {
Line 778: String cachedir = System.getenv("ENGINE_CACHE");
Line 779: if (cachedir == null) {
Line 780: log.warn("ENGINE_CACHE environment not found using
tmpdir");
Line 781: cachedir = System.getProperty("java.io.tmpdir");
Line 782: }
Done, are you sure it will always be exist? (development mode)
Line 783: s_bootstrapPackage = new CachedTar(
Line 784: new File(cachedir, Config.<String>
GetValue(ConfigValues.BootstrapPackageName)),
Line 785: new File(Config.<String>
GetValue(ConfigValues.BootstrapPackageDirectory))
Line 786: );
Line 790: String logdir = System.getenv("ENGINE_LOG");
Line 791: if (logdir == null) {
Line 792: log.warn("ENGINE_LOG environment not found using
tmpdir");
Line 793: s_bootstrapLogDir = new
File(System.getProperty("java.io.tmpdir"));
Line 794: }
Done
Line 795: else {
Line 796: s_bootstrapLogDir = new File(logdir, "bootstrap");
Line 797: if (!s_bootstrapLogDir.exists()) {
Line 798: s_bootstrapLogDir.mkdirs();
--
To view, visit http://gerrit.ovirt.org/9175
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: If78c62601231f4729ca95da7653907b37856d672
Gerrit-PatchSet: 11
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alon Bar-Lev <[email protected]>
Gerrit-Reviewer: Allon Mureinik <[email protected]>
Gerrit-Reviewer: Alon Bar-Lev <[email protected]>
Gerrit-Reviewer: Barak Azulay <[email protected]>
Gerrit-Reviewer: Doron Fediuck <[email protected]>
Gerrit-Reviewer: Douglas Schilling Landgraf <[email protected]>
Gerrit-Reviewer: Eli Mesika <[email protected]>
Gerrit-Reviewer: Juan Hernandez <[email protected]>
Gerrit-Reviewer: Yair Zaslavsky <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches